#include<stdio.h>
void main() {
    int in_a = 1, sum = 0;
    // "%I"（2），表示传了一个立即数2，并用了立即数约束I，这会让gcc将数字2变成汇编语言中的立即数$2。
    /* 用到了修饰符'%'，这表示约束I对应的操作数可以和下一个输入所约束的操作数对换位置。下一个输入是"0"（in_a），前面用了通用约束'0'，这表示，要求gcc把分配给C变量in_a的操作数（寄存器或内存）同序号0对应的汇编操作数一样，也就是，位于output和input中序号为0的输入，其所约束的操作数（寄存器或内存）是什么，就把我安排成什么。序号0是"=a"（sum），约束a将寄存器eax分配给变量sum，所以in_a也被分配为eax，这有点类似修饰符'+'同时可读可写。 */
    asm("addl %1, %0;":"=a"(sum):"%I"(2),"0"(in_a):"memory");
    printf("sum is %d\n ", sum);
}
 
 
